using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Features
{
    /// <summary>
    /// <para>Table To Ellipse</para>
    /// <para>Creates a feature class containing geodetic ellipse features constructed based on the values in an x-coordinate field, y-coordinate field, major-axis field, minor-axis field, and azimuth field of a table.</para>
    /// <para>创建一个要素类，其中包含根据表的 x 坐标字段、y 坐标字段、长轴字段、短轴字段和方位角字段中的值构造的大地椭圆要素。</para>
    /// </summary>    
    [DisplayName("Table To Ellipse")]
    public class TableToEllipse : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public TableToEllipse()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_table">
        /// <para>Input Table</para>
        /// <para>The input table. It can be a text file, CSV file, Excel file, dBASE table, or geodatabase table.</para>
        /// <para>输入表。它可以是文本文件、CSV 文件、Excel 文件、dBASE 表或地理数据库表。</para>
        /// </param>
        /// <param name="_out_featureclass">
        /// <para>Output Feature Class</para>
        /// <para>The output feature class containing geodetic ellipses as densified polylines.</para>
        /// <para>包含大地椭圆作为致密折线的输出要素类。</para>
        /// </param>
        /// <param name="_x_field">
        /// <para>X Field</para>
        /// <para>A numerical field in the input table containing the x-coordinates (or longitudes) of the center points of ellipses to be positioned in the output coordinate system specified by the Spatial Reference parameter.</para>
        /// <para>输入表中的数值字段，其中包含要定位在空间参考参数指定的输出坐标系中的椭圆中心点的 x 坐标（或经度）。</para>
        /// </param>
        /// <param name="_y_field">
        /// <para>Y Field</para>
        /// <para>A numerical field in the input table containing the y-coordinates (or latitudes) of the center points of ellipses to be positioned in the output coordinate system specified by the Spatial Reference parameter.</para>
        /// <para>输入表中的数值字段，其中包含要定位在空间参考参数指定的输出坐标系中的椭圆中心点的 y 坐标（或纬度）。</para>
        /// </param>
        /// <param name="_major_field">
        /// <para>Major Field</para>
        /// <para>A numerical field in the input table containing major axis lengths of the ellipses.</para>
        /// <para>输入表中包含椭圆长轴长度的数值字段。</para>
        /// </param>
        /// <param name="_minor_field">
        /// <para>Minor Field</para>
        /// <para>A numerical field in the input table containing minor axis lengths of the ellipses.</para>
        /// <para>输入表中包含椭圆短轴长度的数值字段。</para>
        /// </param>
        /// <param name="_distance_units">
        /// <para>Distance Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the units that will be used for the Major Field and Minor Field parameters.</para>
        ///   <bulletList>
        ///     <bullet_item>Meters—The units will be meters.</bullet_item><para/>
        ///     <bullet_item>Kilometers—The units will be kilometers.</bullet_item><para/>
        ///     <bullet_item>Miles—The units will be miles.</bullet_item><para/>
        ///     <bullet_item>Nautical miles—The units will be nautical miles.</bullet_item><para/>
        ///     <bullet_item>Feet—The units will be feet.</bullet_item><para/>
        ///     <bullet_item>U.S. survey feet—The units will be U.S. survey feet.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于“主要字段”和“次要字段”参数的单位。</para>
        ///   <bulletList>
        ///     <bullet_item>米—单位为米。</bullet_item><para/>
        ///     <bullet_item>千米—单位将为千米。</bullet_item><para/>
        ///     <bullet_item>英里—单位为英里。</bullet_item><para/>
        ///     <bullet_item>海里—单位为海里。</bullet_item><para/>
        ///     <bullet_item>英尺—单位将为英尺。</bullet_item><para/>
        ///     <bullet_item>美国测量英尺—单位为美国测量英尺。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public TableToEllipse(object _in_table, object _out_featureclass, object _x_field, object _y_field, object _major_field, object _minor_field, _distance_units_value _distance_units)
        {
            this._in_table = _in_table;
            this._out_featureclass = _out_featureclass;
            this._x_field = _x_field;
            this._y_field = _y_field;
            this._major_field = _major_field;
            this._minor_field = _minor_field;
            this._distance_units = _distance_units;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Table To Ellipse";

        public override string CallName => "management.TableToEllipse";

        public override List<string> AcceptEnvironments => ["scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_table, _out_featureclass, _x_field, _y_field, _major_field, _minor_field, _distance_units.GetGPValue(), _azimuth_field, _azimuth_units.GetGPValue(), _id_field, _spatial_reference, _attributes.GetGPValue()];

        /// <summary>
        /// <para>Input Table</para>
        /// <para>The input table. It can be a text file, CSV file, Excel file, dBASE table, or geodatabase table.</para>
        /// <para>输入表。它可以是文本文件、CSV 文件、Excel 文件、dBASE 表或地理数据库表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_table { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output feature class containing geodetic ellipses as densified polylines.</para>
        /// <para>包含大地椭圆作为致密折线的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_featureclass { get; set; }


        /// <summary>
        /// <para>X Field</para>
        /// <para>A numerical field in the input table containing the x-coordinates (or longitudes) of the center points of ellipses to be positioned in the output coordinate system specified by the Spatial Reference parameter.</para>
        /// <para>输入表中的数值字段，其中包含要定位在空间参考参数指定的输出坐标系中的椭圆中心点的 x 坐标（或经度）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("X Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _x_field { get; set; }


        /// <summary>
        /// <para>Y Field</para>
        /// <para>A numerical field in the input table containing the y-coordinates (or latitudes) of the center points of ellipses to be positioned in the output coordinate system specified by the Spatial Reference parameter.</para>
        /// <para>输入表中的数值字段，其中包含要定位在空间参考参数指定的输出坐标系中的椭圆中心点的 y 坐标（或纬度）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Y Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _y_field { get; set; }


        /// <summary>
        /// <para>Major Field</para>
        /// <para>A numerical field in the input table containing major axis lengths of the ellipses.</para>
        /// <para>输入表中包含椭圆长轴长度的数值字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Major Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _major_field { get; set; }


        /// <summary>
        /// <para>Minor Field</para>
        /// <para>A numerical field in the input table containing minor axis lengths of the ellipses.</para>
        /// <para>输入表中包含椭圆短轴长度的数值字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minor Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _minor_field { get; set; }


        /// <summary>
        /// <para>Distance Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the units that will be used for the Major Field and Minor Field parameters.</para>
        ///   <bulletList>
        ///     <bullet_item>Meters—The units will be meters.</bullet_item><para/>
        ///     <bullet_item>Kilometers—The units will be kilometers.</bullet_item><para/>
        ///     <bullet_item>Miles—The units will be miles.</bullet_item><para/>
        ///     <bullet_item>Nautical miles—The units will be nautical miles.</bullet_item><para/>
        ///     <bullet_item>Feet—The units will be feet.</bullet_item><para/>
        ///     <bullet_item>U.S. survey feet—The units will be U.S. survey feet.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于“主要字段”和“次要字段”参数的单位。</para>
        ///   <bulletList>
        ///     <bullet_item>米—单位为米。</bullet_item><para/>
        ///     <bullet_item>千米—单位将为千米。</bullet_item><para/>
        ///     <bullet_item>英里—单位为英里。</bullet_item><para/>
        ///     <bullet_item>海里—单位为海里。</bullet_item><para/>
        ///     <bullet_item>英尺—单位将为英尺。</bullet_item><para/>
        ///     <bullet_item>美国测量英尺—单位为美国测量英尺。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Units")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _distance_units_value _distance_units { get; set; }

        public enum _distance_units_value
        {
            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—The units will be meters.</para>
            /// <para>米—单位为米。</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("METERS")]
            _METERS,

            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—The units will be kilometers.</para>
            /// <para>千米—单位将为千米。</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("KILOMETERS")]
            _KILOMETERS,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—The units will be miles.</para>
            /// <para>英里—单位为英里。</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("MILES")]
            _MILES,

            /// <summary>
            /// <para>Nautical miles</para>
            /// <para>Nautical miles—The units will be nautical miles.</para>
            /// <para>海里—单位为海里。</para>
            /// </summary>
            [Description("Nautical miles")]
            [GPEnumValue("NAUTICAL_MILES")]
            _NAUTICAL_MILES,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—The units will be feet.</para>
            /// <para>英尺—单位将为英尺。</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("FEET")]
            _FEET,

            /// <summary>
            /// <para>U.S. survey feet</para>
            /// <para>U.S. survey feet—The units will be U.S. survey feet.</para>
            /// <para>美国测量英尺—单位为美国测量英尺。</para>
            /// </summary>
            [Description("U.S. survey feet")]
            [GPEnumValue("US_SURVEY_FEET")]
            _US_SURVEY_FEET,

        }

        /// <summary>
        /// <para>Azimuth Field</para>
        /// <para>A numerical field in the input table containing azimuth angle values for the major axis rotations of the output ellipses. The values are measured clockwise from north.</para>
        /// <para>输入表中的数值字段，包含输出椭圆的长轴旋转的方位角值。这些值是从北顺时针方向测量的。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Azimuth Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _azimuth_field { get; set; } = null;


        /// <summary>
        /// <para>Azimuth Units</para>
        /// <para>Specifies the units that will be used for the Azimuth Field parameter.</para>
        /// <para>指定将用于方位角字段参数的单位。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Azimuth Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _azimuth_units_value _azimuth_units { get; set; } = _azimuth_units_value._DEGREES;

        public enum _azimuth_units_value
        {
            /// <summary>
            /// <para>Decimal degrees</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Decimal degrees")]
            [GPEnumValue("DEGREES")]
            _DEGREES,

            /// <summary>
            /// <para>Mils</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Mils")]
            [GPEnumValue("MILS")]
            _MILS,

            /// <summary>
            /// <para>Radians</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Radians")]
            [GPEnumValue("RADS")]
            _RADS,

            /// <summary>
            /// <para>Gradians</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Gradians")]
            [GPEnumValue("GRADS")]
            _GRADS,

        }

        /// <summary>
        /// <para>ID</para>
        /// <para>A field in the input table. This field and the values are included in the output and can be used to join the output features with the records in the input table.</para>
        /// <para>输入表中的字段。此字段和值包含在输出中，可用于将输出要素与输入表中的记录连接起来。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("ID")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _id_field { get; set; } = null;


        /// <summary>
        /// <para>Spatial Reference</para>
        /// <para>The spatial reference of the output feature class. The default is GCS_WGS_1984 or the input coordinate system if it is not Unknown.</para>
        /// <para>输出要素类的空间参考。默认值为 GCS_WGS_1984 或输入坐标系（如果它不是未知）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spatial_reference { get; set; } = null;


        /// <summary>
        /// <para>Preserve attributes</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the remaining input fields will be written to the output feature class.</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>Unchecked—The remaining input fields will not be written to the output feature class. This is the default.</bullet_item><para/>
        ///       <bullet_item>Checked—The remaining input fields will be included in the output feature class. A new field, ORIG_FID, will also be added to the output feature class to store the input feature ID values.</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否将剩余输入字段写入输出要素类。</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>未选中 - 其余输入字段不会写入输出要素类。这是默认设置。</bullet_item><para/>
        ///       <bullet_item>选中 - 其余输入字段将包含在输出要素类中。新字段 ORIG_FID 也将添加到输出要素类中，用于存储输入要素 ID 值。</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserve attributes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _attributes_value _attributes { get; set; } = _attributes_value._false;

        public enum _attributes_value
        {
            /// <summary>
            /// <para>ATTRIBUTES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ATTRIBUTES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_ATTRIBUTES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_ATTRIBUTES")]
            [GPEnumValue("false")]
            _false,

        }

        public TableToEllipse SetEnv(object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}